package com.chinafree.handler;
// //
// //import com.auth0.jwt.interfaces.DecodedJWT;
// //import com.chinafree.business.model.param.ChatParam;
// //import com.chinafree.common.utils.JWTUtils;
// //import com.chinafree.model.enumeration.JWTValue;
// //import lombok.extern.slf4j.Slf4j;
// //import org.springframework.web.socket.CloseStatus;
// //import org.springframework.web.socket.TextMessage;
// //import org.springframework.web.socket.WebSocketSession;
// //import org.springframework.web.socket.handler.TextWebSocketHandler;
// //
// //import java.io.IOException;
// //import java.util.Set;
// //import java.util.concurrent.ConcurrentHashMap;
// //import java.util.concurrent.atomic.AtomicInteger;
// //
// //@Slf4j
// //public class MyWebSocketHandler extends TextWebSocketHandler {
// //
// //
// //    private static final String CHAT_PARAM = "chat_param";
// //
// //    //静态变量，用来记录当前在线连接数。应该把它设计成线程安全的。
// //    private static AtomicInteger onlineNum = new AtomicInteger();
// //    //concurrent包的线程安全Set，用来存放每个客户端对应的WebSocketServer对象。
// //    private static ConcurrentHashMap<Long, WebSocketSession> userSessionPools = new ConcurrentHashMap<>();
// //
// //    private static ConcurrentHashMap<Long, WebSocketSession> companySessionPools = new ConcurrentHashMap<>();
// //
// //    private static ConcurrentHashMap<Long, WebSocketSession> sessionPools = new ConcurrentHashMap<>();
// //
// //
// //    @Override
// //    public void handleTextMessage(WebSocketSession session, TextMessage message)
// //            throws IOException {
// //        log.info("获取到消息 >>{} ", message.getPayload());
// //        ChatParam chatParam = (ChatParam) session.getAttributes().get(CHAT_PARAM);
// //        String token = chatParam.getToken();
// //        DecodedJWT tokenInfo = JWTUtils.getTokenInfo(token);
// //        String userId = tokenInfo.getHeaderClaim(JWTValue.USER_ID.getValue()).asString();
// //        String roleId = tokenInfo.getHeaderClaim(JWTValue.ROLE_ID.getValue()).asString();
// //        String companyId = tokenInfo.getHeaderClaim(JWTValue.COMPANY_ID.getValue()).asString();
// //
// //        session.sendMessage(new TextMessage(String.format("收到用户：【%s】发来的【%s】",
// //                session.getAttributes().get("uid"), message.getPayload())));
// //    }
// //
// //    @Override
// //    public void afterConnectionEstablished(WebSocketSession session) throws
// //            Exception {
// //        //建立连接
// //        Long uid = (Long) session.getAttributes().get(JWTValue.USER_ID);
// //        log.info("获取到拦截器中用户ID : {}", uid);
// //        //TODO: 重复链接没有进行处理
// //        sessionPools.put(uid, session);
// //        addOnlineCount();
// //        log.info(uid + "加入webSocket！当前人数为" + onlineNum);
// //        session.sendMessage(new TextMessage("欢迎连接到ws服务! 当前人数为：" + onlineNum));
// //    }
// //
// //
// //    @Override
// //    public void afterConnectionClosed(WebSocketSession session, CloseStatus status)
// //            throws Exception {
// //        System.out.println("断开连接!");
// //        String uid = session.getAttributes().get("uid").toString();
// //        sessionPools.remove(uid);
// //        subOnlineCount();
// //    }
// //
// //    /**
// //     * 添加链接人数
// //     */
// //    public static void addOnlineCount() {
// //        onlineNum.incrementAndGet();
// //    }
// //
// //    /**
// //     * 移除链接人数
// //     */
// //    public static void subOnlineCount() {
// //        onlineNum.decrementAndGet();
// //    }
// //
// //}
// package com.chinafree.handler;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

// import com.chinafree.model.enumeration.JWTValue;
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.web.socket.CloseStatus;
// import org.springframework.web.socket.TextMessage;
// import org.springframework.web.socket.WebSocketSession;
// import org.springframework.web.socket.handler.TextWebSocketHandler;

// import java.io.IOException;
// import java.util.concurrent.ConcurrentHashMap;
// import java.util.concurrent.atomic.AtomicInteger;

// @Slf4j
// public class MyWebSocketHandler extends TextWebSocketHandler {

//     //静态变量，用来记录当前在线连接数。应该把它设计成线程安全的。
//     private static AtomicInteger onlineNum = new AtomicInteger();
//     //concurrent包的线程安全Set，用来存放每个客户端对应的WebSocketServer对象。
// //    private static ConcurrentHashMap<Long, WebSocketSession> userSession = new ConcurrentHashMap<>();
// //    private static ConcurrentHashMap<Long, WebSocketSession> companySession = new ConcurrentHashMap<>();
// //    private static ConcurrentHashMap<Long, WebSocketSession> companyMapUser = new ConcurrentHashMap<>();
//     private static ConcurrentHashMap<Long, WebSocketSession> sessionPools = new ConcurrentHashMap<>();
//     @Override
//     public void handleTextMessage(WebSocketSession session, TextMessage message)
//             throws IOException {
//         log.info("获取到消息 >>{} ", message.getPayload());
//         session.sendMessage(new TextMessage(String.format("收到用户：【%s】发来的【%s】",
//                 session.getAttributes().get("uid"), message.getPayload())));
//     }

//     @Override
//     public void afterConnectionEstablished(WebSocketSession session) throws
//             Exception {
//         Long uid = (Long) session.getAttributes().get(JWTValue.USER_ID);
//         log.info("获取到拦截器中用户ID : {}", uid);
//         //TODO: 重复链接没有进行处理
//         sessionPools.put(uid, session);
//         addOnlineCount();
//         log.info(uid + "加入webSocket！当前人数为" + onlineNum);
//         session.sendMessage(new TextMessage("欢迎连接到ws服务! 当前人数为：" + onlineNum));
//     }


//     @Override
//     public void afterConnectionClosed(WebSocketSession session, CloseStatus status)
//             throws Exception {
//         System.out.println("断开连接!");
//         String uid = session.getAttributes().get("uid").toString();
//         sessionPools.remove(uid);
//         subOnlineCount();
//     }

//     /**
//      * 添加链接人数
//      */
//     public static void addOnlineCount() {
//         onlineNum.incrementAndGet();
//     }

//     /**
//      * 移除链接人数
//      */
//     public static void subOnlineCount() {
//         onlineNum.decrementAndGet();
//     }

// }

// @Component
// public class WebSocketHandler extends TextWebSocketHandler {

//     @Override
//     public void afterConnectionEstablished(WebSocketSession session) throws Exception {
//         super.afterConnectionEstablished(session);
//     }

//     @Override
//     protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
//         session.sendMessage(message);
//     }
// }
